using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AnalysisTools._Statistics
{
    /// <summary>
    /// <para>Enrich</para>
    /// <para>Enriches data by adding demographic and landscape facts about the people and places that surround or are inside data locations.  The output is a duplicate of your input with additional attribute fields.  This tool requires an ArcGIS Online organizational account or a locally installed Business Analyst dataset.</para>
    /// <para>通过添加有关数据位置周围或位于数据位置内的人员和地点的人口统计和景观事实来丰富数据。 输出是带有其他属性字段的输入的副本。 此工具需要 ArcGIS Online 组织帐户或本地安装的 Business Analyst 数据集。</para>
    /// </summary>    
    [DisplayName("Enrich")]
    public class Enrich : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Enrich()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The features to be enriched.</para>
        /// <para>要丰富的功能。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output feature class</para>
        /// <para>A new layer containing both the input attributes and user-selected attributes. User-selected attributes are summarized from underlying demographic boundaries. Only the area inside the input boundary is considered.</para>
        /// <para>包含输入属性和用户选择属性的新图层。用户选择的属性是根据基础人口统计边界进行汇总的。仅考虑输入边界内的区域。</para>
        /// </param>
        public Enrich(object _in_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Analysis Tools";

        public override string ToolName => "Enrich";

        public override string CallName => "analysis.Enrich";

        public override List<string> AcceptEnvironments => ["baDataSource", "workspace"];

        public override object[] ParameterInfo => [_in_features, _out_feature_class, _variables, _buffer_type, _distance, _unit];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The features to be enriched.</para>
        /// <para>要丰富的功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output feature class</para>
        /// <para>A new layer containing both the input attributes and user-selected attributes. User-selected attributes are summarized from underlying demographic boundaries. Only the area inside the input boundary is considered.</para>
        /// <para>包含输入属性和用户选择属性的新图层。用户选择的属性是根据基础人口统计边界进行汇总的。仅考虑输入边界内的区域。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output feature class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Variables</para>
        /// <para>The variables to be summarized and added to the output feature class.</para>
        /// <para>要汇总并添加到输出要素类的变量。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Variables")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _variables { get; set; } = null;


        /// <summary>
        /// <para>Define areas to enrich</para>
        /// <para>Input point features must have an associated boundary polygon to enrich. When connected to ArcGIS Online, travel mode options are dynamically populated. Input line features can only use Straight Line distance. The default value is Straight Line.</para>
        /// <para>输入点要素必须具有关联的边界面才能丰富。连接到 ArcGIS Online 时，将动态填充出行模式选项。输入线要素只能使用直线距离。默认值为 Straight Line。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Define areas to enrich")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _buffer_type { get; set; } = null;


        /// <summary>
        /// <para>Distance or time</para>
        /// <para>Determines the distance or size of an area to enrich (for example, a 1-mile buffer or 5-minute walk time). Units correspond to the buffer type. The default value is 1.</para>
        /// <para>确定要扩充的区域的距离或大小（例如，1 英里缓冲区或 5 分钟步行时间）。单位对应于缓冲区类型。默认值为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance or time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _distance { get; set; } = 1;


        /// <summary>
        /// <para>Unit</para>
        /// <para><xdoc>
        ///   <para>The units associated with the distance or time parameter.</para>
        ///   <bulletList>
        ///     <bullet_item>Miles—Miles</bullet_item><para/>
        ///     <bullet_item>Yards—Yards</bullet_item><para/>
        ///     <bullet_item>Feet—Feet</bullet_item><para/>
        ///     <bullet_item>Kilometers—Kilometers</bullet_item><para/>
        ///     <bullet_item>Meters—Meters</bullet_item><para/>
        ///     <bullet_item>Hours—Hours</bullet_item><para/>
        ///     <bullet_item>Minutes—Minutes</bullet_item><para/>
        ///     <bullet_item>Seconds—Seconds</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>与距离或时间参数关联的单位。</para>
        ///   <bulletList>
        ///     <bullet_item>英里 - 英里</bullet_item><para/>
        ///     <bullet_item>码 - 码</bullet_item><para/>
        ///     <bullet_item>英尺 - 英尺</bullet_item><para/>
        ///     <bullet_item>公里 - 公里</bullet_item><para/>
        ///     <bullet_item>米 - 米</bullet_item><para/>
        ///     <bullet_item>小时 - 小时</bullet_item><para/>
        ///     <bullet_item>分钟 - 分钟</bullet_item><para/>
        ///     <bullet_item>秒 - 秒</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Unit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _unit { get; set; } = null;


        public Enrich SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}